前端網頁若要取得一個檔案,大家可能第一個畫面就是下面這個UI吧!是利用<input type="file">
,選擇本地端檔案的畫面
我們透過這個方式選擇了一個檔案後,這個檔案會是怎麼呈現?“檔案”本身是什麼呢?選擇了檔案之後,我們用console印出來選擇的這個檔案如下:
可以看到這個被選擇的檔案是一個在FileList
中的File
的物件,那什麼是FileList
, 什麼是File
? 今天就讓我們深入解析一下關與檔案類的物件關係吧
Blob其實不是javascript獨有的。最早Blob是應用在在資料庫管理中,用於儲存影音、大型文件或圖檔。這些大型檔案,無法儲存在一般的常規資料庫中,因此有了Blob的資料型態,儲存大量的非結構化物件資料。
Blob 物件為一個不可變、相當於檔案(原始資料)的類檔案物件。在前端網頁最大的貢獻應該就是可以讓我們更方便地處理檔案相關的操作ex. 分片上傳、圖檔預覽等等,後面都會接續提到。透過Blob,javaScript才能讀寫二進位資料的檔案。
Blob主要包含兩個屬性
一種用來描述檔案格式的標準化方式,Ex.圖檔可能就會是image/png
。也可以稱為「媒體類型」(media type)、「内容類型」(content type)。瀏覽器通常使用MIME type,而「不是」我們一般看到的檔案的副檔名(file extention)來決定怎麼處理這份文件。
File 繼承了 Blob,所以擁有Blob有的 size 和 type 屬性,和Blob最大的不同之處在於有實際參照到檔案系統中的檔案:簡單一點來說,就是他就是從實際的檔案產生出來的檔案物,不是新增先新增了一個物件在關聯到檔案內容。因此也新增了File多的屬性:
前端可以透過兩個方式
透過 <input type="file">
選取檔案後的物件,即為FileList,是一個可藉此存取使用者選取之檔案的類陣列物件。FileList中可以包含一個檔案或多個檔案。
選取一個檔案
選取多個檔案